home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / program / progem.arc / sources.arc / RCFILE.C < prev    next >
C/C++ Source or Header  |  1986-10-12  |  3KB  |  166 lines

  1. /*------------------------------*/
  2. /*    includes        */
  3. /*------------------------------*/
  4.  
  5. #include "portab.h"                /* portable coding conv    */
  6. #include "machine.h"                /* machine depndnt conv    */
  7. #include "osbind.h"                /* BDOS defintions    */
  8. #include "gemdefs.h"
  9.  
  10. /*------------------------------*/
  11. /*    open_file         */
  12. /*------------------------------*/
  13.     WORD
  14. open_file(file_name)
  15.     BYTE    *file_name;
  16.     {
  17.     LONG    dos_hndl;
  18.  
  19.     FOREVER
  20.         {
  21.         dos_hndl = Fopen(file_name, 0);
  22.         if (dos_hndl >= 0)
  23.             return ((WORD) dos_hndl);
  24.         if ( !dos_error((WORD) dos_hndl) )
  25.             return (-1);
  26.         }
  27.  
  28.     return (-1);        /* Appease lint */
  29.     }
  30.  
  31. /*------------------------------*/
  32. /*    create_file         */
  33. /*------------------------------*/
  34.     WORD
  35. create_file(file_name)
  36.     BYTE    *file_name;
  37.     {
  38.     LONG    dos_hndl;
  39.  
  40.     FOREVER
  41.         {
  42.         dos_hndl = Fcreate(file_name, 0);
  43.         if (dos_hndl >= 0)
  44.             return ((WORD) dos_hndl);
  45.         if ( !dos_error((WORD) dos_hndl) )
  46.             return (-1);
  47.         }
  48.  
  49.     return (-1);        /* Appease lint */
  50.     }
  51.  
  52. /*------------------------------*/
  53. /*    dos_error         */
  54. /*------------------------------*/
  55.     WORD
  56. dos_error(tos_err)
  57.     WORD    tos_err;
  58.     {
  59.     WORD    f_ret;
  60.  
  61.     graf_mouse(ARROW, 0x0L);
  62.     if (tos_err > -50)
  63.         {
  64.         tos_err += 31;
  65.         tos_err = -tos_err;
  66.         }
  67.     f_ret = form_error(tos_err);
  68.     close_files();
  69.     return (f_ret);
  70.     }
  71.  
  72. /*------------------------------*/
  73. /*    get_file         */
  74. /*------------------------------*/
  75.     WORD
  76. get_file(extnt, got_file)
  77.     BYTE    *extnt, *got_file;
  78.     {
  79.     WORD    butn, ii;
  80.     BYTE    tmp_path[64], tmp_name[13];
  81.  
  82.     tmp_name[0] = '\0';
  83.     tmp_path[0] = '\0';
  84.  
  85.     if (*got_file)
  86.         parse_fname(got_file, tmp_path, tmp_name, extnt);
  87.     if (!tmp_path[0])
  88.         get_path(&tmp_path[0], extnt);
  89.  
  90.     fsel_input(tmp_path, tmp_name, &butn);
  91.     if (butn)
  92.         {
  93.         strcpy(got_file, tmp_path);
  94.         for (ii = 0; got_file[ii] && got_file[ii] != '*'; ii++);
  95.         got_file[ii - 1] = '\0';
  96.         strcat (got_file, "\\");
  97.         strcat(got_file, tmp_name);
  98.         return (TRUE);
  99.         }
  100.     else
  101.         return (FALSE);
  102.     }
  103.  
  104. /*------------------------------*/
  105. /*    parse_fname         */
  106. /*------------------------------*/
  107.     VOID
  108. parse_fname(full, path, name, extnt)
  109.     BYTE    *full, *path, *name, *extnt;
  110.     {
  111.     WORD    i, j;
  112.     BYTE    *s, *d;
  113.  
  114.     for (i = strlen(full); i--; )        /* scan for end of path */
  115.         if (full[i] == '\\' || full[i] == ':')
  116.             break;
  117.     if (i == -1)
  118.         strcpy(name, full);        /* "Naked" file name */
  119.     else
  120.         {
  121.         strcpy(name, &full[i+1]);
  122.         for (s = full, d = path, j = 0; j++ < i + 1;
  123.             *d++ = *s++);
  124.         strcpy(&path[i+1], "*.");
  125.         strcat(path, extnt);
  126.         }
  127.     }
  128.  
  129. /*------------------------------*/
  130. /*    get_path         */
  131. /*------------------------------*/
  132.     VOID
  133. get_path(tmp_path, spec)
  134.     BYTE    *tmp_path, *spec;
  135.     {
  136.     WORD    cur_drv;
  137.  
  138.     cur_drv = Dgetdrv();
  139.     tmp_path[0] = cur_drv + 'A';
  140.     tmp_path[1] = ':';
  141.     Dgetpath(&tmp_path[2], 0);
  142.     if (strlen(tmp_path) > 3)
  143.         strcat(tmp_path, "\\");
  144.     else
  145.         tmp_path[2] = '\0';
  146.     strcat(tmp_path, "*.");
  147.     strcat(tmp_path, spec);
  148.     }
  149.  
  150. /*------------------------------*/
  151. /*    new_ext         */
  152. /*------------------------------*/
  153.     VOID
  154. new_ext(o_fname, n_fname, ext)
  155.     BYTE    *o_fname, *n_fname, *ext;
  156.     {
  157.     WORD    ii, jj;
  158.  
  159.     strcpy(n_fname, o_fname);
  160.     for (ii = (jj = strlen(n_fname)) - 1; ii && n_fname[ii] != '.'; ii--);
  161.     if (!ii)
  162.         n_fname[ii = jj] = '.';
  163.     strcpy(&n_fname[++ii], ext);
  164.     }
  165.  
  166.